#ifndef INFER_COMMON_H_
#define INFER_COMMON_H_

#include <vector>
#include <array>

enum InferBoxType {
    REG = 0,
    CLS = 1,    
    DIM = 2,
    ROT = 3,
    VEL = 4,
    HEIGHT = 5,
    COUNT = 6
  };

  struct LocationItem {
    std::uint8_t out_id;
    char* addr;
    std::uint32_t start;
    std::uint32_t size;
    std::uint16_t prev_dim;
    std::uint16_t last_dim;
  };

  struct OutLocation {
    std::array<std::array<LocationItem, InferBoxType::COUNT>, 8> box_loc;   
    std::array<std::array<LocationItem, 2>, 3> map_loc;
  };

struct InferBoxRaw {
  std::vector<float> reg;
  std::vector<float> height;
  std::vector<float> dim;
  std::vector<float> rot;
  std::vector<float> vel;
  std::vector<float> cls;
};

struct InferMapRaw {
  std::vector<float> reg;
  std::vector<float> cls;
};

struct InferOutputDataRaw {
  std::int64_t timestamp;

  InferBoxRaw box_0;
  InferBoxRaw box_1;
  InferBoxRaw box_2;
  InferBoxRaw box_3;
  InferBoxRaw box_4;
  InferBoxRaw box_5;

  // InferBoxRaw box[6];
  // InferMapRaw map[3];

  InferMapRaw map_0;
  InferMapRaw map_1;
  InferMapRaw map_2;
};

#endif  // !INFER_COMMON_H_
